package ar.com.faccioli.templates.imagen;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;

import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.validator.EmailValidator;
import org.apache.commons.validator.UrlValidator;
import org.springframework.transaction.annotation.Transactional;
import org.zkoss.util.media.Media;
import org.zkoss.zk.ui.AbstractComponent;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.Sessions;
import org.zkoss.zk.ui.SuspendNotAllowedException;
import org.zkoss.zk.ui.WrongValueException;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zk.ui.event.InputEvent;
import org.zkoss.zk.ui.event.UploadEvent;
import org.zkoss.zk.ui.util.Composer;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zkplus.databind.AnnotateDataBinder;
import org.zkoss.zkplus.databind.DataBinder;
import org.zkoss.zul.A;
import org.zkoss.zul.Button;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.Grid;
import org.zkoss.zul.Groupbox;
import org.zkoss.zul.Hbox;
import org.zkoss.zul.Image;
import org.zkoss.zul.Intbox;
import org.zkoss.zul.Label;
import org.zkoss.zul.ListModelList;
import org.zkoss.zul.Menubar;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Radiogroup;
import org.zkoss.zul.Separator;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Vbox;
import org.zkoss.zul.Window;





import com.ibm.icu.text.SimpleDateFormat;

@Transactional
public class Controller extends GenericForwardComposer implements
		Composer {

	/**
	 * Variables de la Vista
	 */
	protected DataBinder binder;
	protected Window wnd;

	protected Button buttonAgregarImagen;
	protected Button buttonQuitarImagen;
	protected Image imagen;
	protected Label labelImagen;


	
	/**
	 * Inyecciones Spring
	 */


	public void doAfterCompose(Component comp) throws Exception {
		super.doAfterCompose(comp);

	}

	/**
	 * Cuando se crea una pagina de mensaje nuevo, se cargan todos los usuarios.
	 * 
	 * @throws IOException
	 */
	public void onCreate$wnd() throws IOException {
		inicializarInterfaz();

		binder = new AnnotateDataBinder(wnd);
		binder.loadAll();

		buttonAgregarImagen.setUpload("true,maxsize=-1");
		buttonAgregarImagen.addEventListener(Events.ON_UPLOAD, new EventListener() {// HASTA
					// QUE
					// NO
					// SELECCIONA
					// UN
					// ARCHIVO NO ENTRA EN ESTE
					// EVENTO
					@Override
					public void onEvent(Event e) throws Exception {
						Media media = ((UploadEvent) e).getMedia();
						Resizer rs = new Resizer();

						// buttonAddCotizacion.detach();
						if ("jpeg".equals(media.getFormat()) || "png".equals(media.getFormat())) {
							imagen.setAttribute("imagen", media.getByteData());
							imagen.setContent(rs.scaleImage(
									media.getByteData(), 100, 100));
							labelImagen.setAttribute("isEdit", true);
							labelImagen.setValue("*Modificada");
							labelImagen.setStyle("font-weight: bold; color=#FF0000;");
						} else {
							Messagebox.show("El archivo no es del tipo JPG",
									"Error", Messagebox.OK, Messagebox.ERROR);
						}
					}
				});

		// listaDivGeografica.setSource(getModelOfPais());
	}

	
	public void setImageDefault() throws IOException {
		Resizer rs = new Resizer();
		FileInputStream is = new FileInputStream(new File(
				"/img/autor/no_foto_autor.png"));

		imagen.setContent(rs.scaleImage(IOUtils.toByteArray(is), 100, 100));
	}

	
	
	public void inicializarInterfaz() throws IOException{
		
		//VALORES DEL AUTOR SELECCIONADO
		setImageAutorDefault();

	}
	


	public void setImageAutorDefault() throws IOException {
		byte[] imagenObjeto = null;
		//imagenObjeto = objeto.getImagen() ;
		if (imagenObjeto != null) {
			Resizer rs = new Resizer();
			imagen.setContent(rs.scaleImage(imagenObjeto, 100,
					100));
		} else {
			imagen.setSrc("/img/no_foto.png");
		}
	}

	public void onClick$buttonQuitarImagen() {
		imagen.setSrc("/img/no_foto.png");
		imagen.setAttribute("imagen", null);
		labelImagen.setAttribute("isEdit", true);
		labelImagen.setValue("*Modificada");
	}

	public byte[] getImagen() {
		if (imagen.getAttribute("imagen") != null){
			return (byte[]) imagen.getAttribute("imagen"); 
		}
		return null;
		
	}


	public void onClick$buttonCancelarAutor() {
		limpiarCampos();
		Events.postEvent("onClose", wnd, null);
	}



	private void limpiarCampos() {
		imagen.setSrc("/img/no_foto.png");
	}

	
}
